view_test = {
  'view.adaptor': files('adaptor.cpp'),
  'view.addressof': files('addressof.cpp'),
  'view.adjacent_remove_if': files('adjacent_remove_if.cpp'),
  'view.all': files('all.cpp'),
  'view.any_view': files('any_view.cpp'),
  'view.common': files('common.cpp'),
  'view.cache1': files('cache1.cpp'),
  'view.cartesian_product': files('cartesian_product.cpp'),
  'view.chunk': files('chunk.cpp'),
  'view.chunk_by': files('chunk_by.cpp'),
  'view.concat': files('concat.cpp'),
  'view.const': files('const.cpp'),
  'view.conversion': files('conversion.cpp'),
  'view.counted': files('counted.cpp'),
  'view.cycle': files('cycle.cpp'),
  'view.delimit': files('delimit.cpp'),
  'view.drop': files('drop.cpp'),
  'view.drop_exactly': files('drop_exactly.cpp'),
  'view.drop_while': files('drop_while.cpp'),
  'view.drop_last': files('drop_last.cpp'),
  'view.enumerate': files('enumerate.cpp'),
  'view.exclusive_scan': files('exclusive_scan.cpp'),
  'view.facade': files('facade.cpp'),
  'view.generate': files('generate.cpp'),
  'view.generate_n': files('generate_n.cpp'),
  'view.getlines': files('getlines.cpp'),
  'view.group_by': files('group_by.cpp'),
  'view.indirect': files('indirect.cpp'),
  'view.intersperse': files('intersperse.cpp'),
  'view.iota': files('iota.cpp'),
  'view.istream': files('istream.cpp'),
  'view.iterator_range': files('iterator_range.cpp'),
  'view.join': files('join.cpp'),
  'view.linear_distribute': files('linear_distribute.cpp'),
  'view.map': files('keys_value.cpp'),
  'view.move': files('move.cpp'),
  'view.partial_sum': files('partial_sum.cpp'),
  'view.repeat': files('repeat.cpp'),
  'view.remove': files('remove.cpp'),
  'view.remove_if': files('remove_if.cpp'),
  'view.replace': files('replace.cpp'),
  'view.replace_if': files('replace_if.cpp'),
  'view.reverse': files('reverse.cpp'),
  'view.sample': files('sample.cpp'),
  'view.set_difference': files('set_difference.cpp'),
  'view.set_intersection': files('set_intersection.cpp'),
  'view.set_symmetric_difference': files('set_symmetric_difference.cpp'),
  'view.set_union': files('set_union.cpp'),
  'view.slice': files('slice.cpp'),
  'view.sliding': files('sliding.cpp'),
  'view.span': files('span.cpp'),
  'view.split': files('split.cpp'),
  'view.stride': files('stride.cpp'),
  'view.subrange': files('subrange.cpp'),
  'view.tail': files('tail.cpp'),
  'view.take': files('take.cpp'),
  'view.take_exactly': files('take_exactly.cpp'),
  'view.take_last': files('take_last.cpp'),
  'view.take_while': files('take_while.cpp'),
  'view.tokenize': files('tokenize.cpp'),
  'view.transform': files('transform.cpp'),
  'view.trim': files('trim.cpp'),
  'view.unique': files('unique.cpp'),
  'view.view': files('view.cpp'),
  'view.zip': files('zip.cpp'),
}

foreach name, sources : view_test
  exe = executable(
    'range.v3.test.@0@'.format(name),
    sources: sources,
    dependencies: range_dep,
  )
  test(name, exe)
endforeach
